petersons algorithm